Overview
Our team was given raw Excel files for a tool shop's customers, orders, tools, suppliers, warehouses, and charity partners, and asked to turn them into a working relational database.
Over three deliverables we wrote business rules, modeled the data in an EER diagram, converted it to a relational schema, normalized it, and implemented and queried it in Oracle APEX.
What I Learned
Start with business rules, not tables
A database is only as good as its understanding of the business. Writing rules like "each order is placed by exactly one customer" first made every later design choice (cardinality, keys, optional vs. required fields) easy to justify.
Modeling complex relationships in an EER diagram
I learned to resolve many-to-many relationships with associative entities, model a ternary relationship when a fact only exists with three parties together, and use a supertype/subtype when records share most attributes but differ in a few.
Primary keys, foreign keys, and data integrity
Choosing the right keys keeps data trustworthy. I learned when to use a natural key, a composite key, or a surrogate key, and how foreign keys stop "orphan" records.
Normalization (1NF → 2NF → 3NF)
Real data is messy. Normalization removes duplicate data so that each fact is stored once and updates don't create inconsistencies.

Building and querying a database with SQL
I turned the design into real tables in Oracle APEX using CREATE TABLE with
data types, NOT NULL constraints, and primary keys, then wrote queries
with joins, GROUP BY, HAVING, and nested subqueries to answer business questions.
SELECT c.CustomerID, c.CustomerName FROM Customer c JOIN ORDERTABLE o ON c.CustomerID = o.CustomerID GROUP BY c.CustomerID, c.CustomerName HAVING COUNT(o.OrderNumber) = ( SELECT MAX(OrderCount) FROM ( SELECT COUNT(OrderNumber) AS OrderCount FROM ORDERTABLE GROUP BY CustomerID));
Working as a team with a structured process
With fixed, sequential deadlines, a structured SDLC approach kept us on track. Reviewing each other's diagrams in working sessions caught errors that one person would have missed.

